//index.js
//获取应用实例
const app = getApp()
import { isPoneAvailable } from '../../utils/reg.js'
import { format } from '../../utils/getTime.js'
import { getProductList, getProductPrice, payment, requestPayment, notifying } from '../../service/common.js';
Page({
  data: {
    isHidden: true, // 点击底部确定时显示隐藏  true 隐藏  false 显示
    hideModal: true, // 点击提交预约时显示隐藏  false 显示  true 隐藏
    getPrice: true, // 用来处理获取价格时的回调，避免还没获取中途用户提交预约照成价格差价
    startTime: '', //当天日期 格式 yyyy年MM月dd日
    dateTime: "", //当前选择日期 格式 yyyy年MM月dd日
    dateTime1: '',//当前选择日期 格式 yyyy-MM-dd
    array: ["上午", "下午"],
    morningOrAfter:-1,  //早上 0 下午 1
    imgArr: [], // 列表数据1
    chooseIndex:-1, // 当前点击的列表数据下标
    form: {
      name: '',
      phone: ''
    },
    price:'', // 选中的套餐价格
    remark:'', // 备注信息
    sendState:0, // 调用提交订单次数
    maxNum:3 // 最多提交3次，还是报错就不再提交
  },
  onLoad: function () {
    this._getProductList()
    let day = new Date();
    day.setTime(day.getTime() + 24 * 60 * 60 * 1000);
    this.setData({ startTime: format("yyyy-MM-dd", day), dateTime: format("yyyy年MM月dd日", day), dateTime1: format("yyyy-MM-dd",day)})
  },
  onShow(){ // 每次进去时重置
    this.sendState = 0
  },
  _getProductList() {
    getProductList().then(res => {
      if (res.code == 200) {
        this.setData({ imgArr: res.data.categories })
      }
    })
  },
  chooseProduct: function (e) {
    this.setData({
      chooseIndex: this.data.chooseIndex != e.currentTarget.dataset.index ? e.currentTarget.dataset.index:-1
    })
    this.checkGetPrice()
  },
  inputeidt(e) {
    let dataset = Number(e.currentTarget.dataset.index)
    let obj = {};
    let value = e.detail.value
    switch (dataset) {
      case 0:
        obj = { ['form.name']: value }
        break;
      default:
        obj = { ['form.phone']: value }
        break;
    }
    this.setData(obj)
  },
  // 页面上午或下午选择
  morningOrAfter: function (e) {
    this.setData({ morningOrAfter: e.detail.value })
    this.checkGetPrice()
  },
  // 弹窗选择上下午
  selectTime: function (e) {
    this.setData({ morningOrAfter: e.currentTarget.dataset.key })
    this.checkGetPrice()
  },
  //显示模态框
  show() {
    if (this.data.morningOrAfter == -1) {
      wx.showToast({
        title: '请选择套餐时间',
        icon: 'none'
      })
    } else if (this.data.chooseIndex == -1) {
      wx.showToast({
        title: '请选择套餐',
        icon: 'none'
      })
    } else {
      this.setData({isHidden: false})
    }
  },
  cancle: function () {
    this.setData({
      isHidden: true,
      hideModal: true
    })
  },
  noClose() {
    return false
  },
  checkGetPrice() { // 检查是否选中 和有没有选中上/下午 有的时候，请求获取价格
    if (this.data.morningOrAfter >= 0 && this.data.chooseIndex >= 0) {
      this.getPrice()
    }
  },
  // 获取商品价格
  getPrice() {
    this.setData({getPrice: false })
      getProductPrice(this.data.imgArr[this.data.chooseIndex].id,
      { time: this.data.dateTime1, time_type: this.data.morningOrAfter==0?'am':'pm'}).then(res=>{
        if(res.code==200){
          this.setData({ price: res.data.price,getPrice:true }) //getPrice用来处理获取价格时的回调，避免还没获取中途用户提交预约照成价格差价
        }
      })
  },
  check() { // 检查填写项
    let title = '';
    let checkObj = this.data.form;
    if (!checkObj.name) {
      title = '姓名不能为空'
    } else if (!checkObj.phone) {
      title = '手机号码不能为空'
    } else if (!isPoneAvailable(checkObj.phone)) {
      title = '请输入正确的手机号码'
    }
    if (title) {
      wx.showToast({ title, icon: 'none', duration: 1000 })
      return false
    } else {
      return true
    }
  },
  //  接收时间
  bindDateChange: function (e) {
    let dateTime = e.detail.value.split('-')
    this.setData({
      dateTime: dateTime[0] + '年' + dateTime[1] + '月' + dateTime[2] + '日',
      dateTime1: e.detail.value
    })
    this.checkGetPrice()
  },
  sendOrder(){
    if (this.check() && this.data.getPrice && this.data.maxNum> this.data.sendState){ // 数据验证通过和非获取价格阶段时提交预约
      let obj = {
        cate_id: this.data.imgArr[this.data.chooseIndex].id,
        time_type: this.data.morningOrAfter==0?'am':'pm',
        time: this.data.dateTime1,
        price: this.data.price,
        username: this.data.form.name,
        phone: this.data.form.phone,
        remark: this.data.remark,
      }
      payment(obj).then(res=>{
        console.log(res)
        if (res.code == 200) {
          let num = res.data.wechat.out_trade_no
          requestPayment(res.data.wechat, res => {
            notifying(num).then(res => {
              console.log(res)
              if (res.code == 200) {
                this.setData({ ['form.name']: '', ['form.phone']: '', hideModal: false })
              }
            })
          }, err => {
            wx.showToast({ title: '预约失败' })
            this.seeOrder()
          })
        } else {
          this.setData({ sendState: Number(this.data.sendState) + 1 }) // 失败时累计次数
          this.sendOrder()
        }
      })
    }
  },
  seeOrder() {
    wx.navigateTo({ url: '/pages/order/order' })
  }
})
